﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Comissoes.Utilities;

namespace Comissoes.Models
{
    public class CodigosBarraModel
    {
        public CODIGOS_BARRA codbar { get; set; }
        xcontEntities db = new xcontEntities();
        List<string> erros;

        public CodigosBarraModel()
        {
            CODIGOS_BARRA codbar = new CODIGOS_BARRA();

            this.codbar = codbar;
        }

        public CodigosBarraModel(Int32? id)
        {
            this.codbar = db.CODIGOS_BARRA.FirstOrDefault(t => t.ID_BAR == id);
        }

        public List<string> UpdateValidate(HttpRequestBase request)
        {
            this.erros = new List<string>();
            String COD_BAR = request["COD_BAR"];
            Int32 COD_PROD = Int32.Parse(request["COD_PROD"]);

            if (string.IsNullOrEmpty(COD_BAR))
                erros.Add("É necessário informar o valor do código de barras.");

            else if (db.CODIGOS_BARRA.Any(t=>t.PRODUTOS.COD_PROD == COD_PROD && t.COD_BAR == COD_BAR && t.ID_BAR != this.codbar.ID_BAR))
                erros.Add("Já existe um código de barras cadastrado com este valor para este produto no momento.");

            return erros;
        }

        public List<string> Update(HttpRequestBase request)
        {
            this.erros = new List<string>();

            try
            {
                Int32 COD_PROD = Int32.Parse(request["COD_PROD"]);

                if (db.CODIGOS_BARRA.Any(t => t.ID_BAR == this.codbar.ID_BAR))
                    this.codbar = db.CODIGOS_BARRA.FirstOrDefault(t => t.ID_BAR == this.codbar.ID_BAR);

                else
                {
                    this.codbar.PRODUTOS = db.PRODUTOS.FirstOrDefault(t => t.COD_PROD == COD_PROD);
                    db.AddToCODIGOS_BARRA(this.codbar);
                }

                this.codbar.COD_BAR = request["COD_BAR"];
                this.codbar.PRINCIPAL_BAR = request["PRINCIPAL_BAR"].Contains("Sim") ? "A" : "B";
                if (request["PRINCIPAL_BAR"].Contains("Sim") && db.CODIGOS_BARRA.Any(t => t.PRINCIPAL_BAR == "A" && t.PRODUTOS.COD_PROD == COD_PROD))
                {
                    CODIGOS_BARRA principal = db.CODIGOS_BARRA.First(t => t.PRINCIPAL_BAR == "A" && t.PRODUTOS.COD_PROD == COD_PROD);
                    principal.PRINCIPAL_BAR = "B";
                }

                db.SaveChanges();
            }
            catch (Exception ex)
            {
                erros.Add(ex.Message);
                if (ex.InnerException != null)
                    erros.Add(ex.InnerException.Message);
            }

            return erros;
        }

        public List<string> Delete()
        {
            this.erros = new List<string>();

            if (!erros.Any())
            {
                try
                {
                    db.DeleteObject(db.CODIGOS_BARRA.FirstOrDefault(t => t.ID_BAR == this.codbar.ID_BAR));
                    db.SaveChanges();
                }
                catch (Exception ex)
                {
                    erros.Add(ex.Message);
                }
            }

            return erros;
        }
    }
}
